package com.example.weatherforecast.citypagetool;

import android.content.Context;
import android.content.SharedPreferences;

import androidx.appcompat.app.AlertDialog;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashSet;
import java.util.Set;


/**
 * @Author：coderChen
 * @Package：com.example.weatherforecast.tool
 * @Project：WeatherForecast
 * @Date：2023/12/31 20:28
 * @Filename：CityDataManager
 * Explain:添加城市到sharedPreferences
 * Explain:new HashSet<>(sharedPreferences.getStringSet("cities", new HashSet<>()))创建SharedPreferences集合的副本
 * 确保数据不会丢失，数据更新到副本citySet再更新到sharedPreferences
 */
public class CityDataManager {
    private static final int MAX_CITY_COUNT = 6;

    public static boolean addCityIfNotExists(String cityName, String cityCode, SharedPreferences sharedPreferences, Context context) {
        // 从SharedPreferences中读取现有的城市集合
        Set<String> citySet = new HashSet<>(sharedPreferences.getStringSet("cities", new HashSet<>()));

        // 检查是否已达到最大城市数量
        if (citySet.size() >= MAX_CITY_COUNT) {
            // 已达到最大城市数量，向用户显示警告对话框
            new AlertDialog.Builder(context)
                    .setMessage("已达到最大城市数量，无法添加更多城市。")
                    .setPositiveButton("确定", null) // OK按钮无需执行任何操作
                    .show();
            return false; // 返回false表示操作失败
        }

        // 检查集合中是否已存在该城市
        if (isCityAlreadyAdded(cityName, citySet)) {
            return false; // 城市已存在，无需添加
        }

        // 创建城市的JSON表示
        JSONObject cityObject = new JSONObject();
        try {
            cityObject.put("cityName", cityName);
            cityObject.put("cityCode", cityCode);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        // 将新城市添加到集合中
        citySet.add(cityObject.toString());

        // 使用Editor更新SharedPreferences中的城市集合
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putStringSet("cities", citySet);
        editor.apply();

        return true; // 返回true表示操作成功
    }

    private static boolean isCityAlreadyAdded(String cityName, Set<String> citySet) {
        for (String cityData : citySet) {
            try {
                JSONObject cityObject = new JSONObject(cityData);
                if (cityObject.getString("cityName").equals(cityName)) {
                    return true; // 城市已存在
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return false; // 城市不存在
    }
}

